package ar.com.cubika.trainees.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import ar.com.cubika.trainees.bean.transportes.Ruta;

public class RutaDAO extends AbstractMySQLDAO {

	// Singleton
	private static RutaDAO instance = new RutaDAO();

	private RutaDAO() {
	}

	public static RutaDAO getInstance() {
		return instance;
	}

	public Ruta getRuta(int id) {

		Ruta ruta = null;

		try {

			Statement stmt = getNewStatement();

			ResultSet rs = stmt.executeQuery("SELECT "
					+ "* FROM RUTA WHERE ID='" + id + "';");

			while (rs.next()) {

				String origen = rs.getString("origen");
				String destino = rs.getString("destino");
				int kmbuenos = rs.getInt("kmbuenos");
				int kmmalos = rs.getInt("kmmalos");
				char tipo = rs.getString("tiporuta").charAt(0);
				boolean conpeaje = rs.getBoolean("conpeaje");

				ruta = new Ruta(origen, destino);
				ruta.setConPeajes(conpeaje);
				ruta.setKmBuenCamino(kmbuenos);
				ruta.setKmMalCamino(kmmalos);
				if (tipo == 'n')
					ruta.setNacional(true);
				if (tipo == 'p')
					ruta.setProvincial(true);
				if (tipo == 'v')
					ruta.setPrivada(true);
			}
			stmt.close();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return ruta;
	}

	public List<Ruta> getAll() {

		Ruta ruta = null;
		List<Ruta> rutas = new ArrayList<Ruta>();

		try {
			Statement stmt = getNewStatement();

			ResultSet rs = stmt.executeQuery("SELECT * FROM RUTA");

			while (rs.next()) {
				int id = rs.getInt("ID");
				String origen = rs.getString("origen");
				String destino = rs.getString("destino");
				int kmbuenos = rs.getInt("kmbuenos");
				int kmmalos = rs.getInt("kmmalos");
				char tipo = rs.getString("tiporuta").charAt(0);
				boolean conpeaje = rs.getBoolean("conpeaje");

				ruta = new Ruta(origen, destino);
				ruta.setConPeajes(conpeaje);
				ruta.setKmBuenCamino(kmbuenos);
				ruta.setKmMalCamino(kmmalos);
				if (tipo == 'n')
					ruta.setNacional(true);
				if (tipo == 'p')
					ruta.setProvincial(true);
				if (tipo == 'v')
					ruta.setPrivada(true);

				List<String> urls = UrlDAO.getInstance().getRutas(id);
				ruta.setUrls(urls);

				rutas.add(ruta);
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return rutas;

	}

	/**
	 * 
	 * 
	 * @param
	 * @return
	 */
	public int insertRuta(Ruta ruta) {

		String origen = ruta.getOrigen();
		String destino = ruta.getDestino();
		int kmbuenos = (int) ruta.getKmBuenCamino();
		int kmmalos = (int) ruta.getKmMalCamino();
		boolean conpeaje = ruta.isConPeajes();
		int retorno = -1;

		char tipo = 0;

		if (ruta.isNacional()) {
			tipo = 'n';
		}
		if (ruta.isProvincial()) {
			tipo = 'p';
		}
		if (ruta.isPrivada()) {
			tipo = 'v';
		}

		try {

			Statement stmt1 = getNewStatement();

			String query = "INSERT INTO RUTA (ORIGEN,DESTINO,KMBUENOS,KMMALOS,CONPEAJE,TIPORUTA)VALUES ('"
					+ origen
					+ "','"
					+ destino
					+ "',"
					+ kmbuenos
					+ ","
					+ kmmalos + "," + conpeaje + ",'" + tipo + "');";

			stmt1.executeUpdate(query);

			stmt1.close();

			Statement stmt2 = getNewStatement();

			ResultSet rs = stmt2.executeQuery("SELECT MAX(ID) AS ID FROM RUTA");

			rs.next();

			retorno = rs.getInt("ID");

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return retorno;
	}

	public Ruta deleteRuta(int id) {

		try {
			Statement stmt1 = getNewStatement();

			String query = "DELETE FROM RUTA WHERE ID ='" + id + "';";

			stmt1.executeUpdate(query);

			stmt1.close();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public int getId(Ruta ruta) {
		int retorno = 0;
		Statement stmt2;
		
		String origen=null;
		String destino = null;
		int distancia = 0;
		
		origen = ruta.getOrigen();
		destino = ruta.getDestino();
		distancia = (int)ruta.getKmBuenCamino();
		
		try {
			stmt2 = getNewStatement();
			
			ResultSet rs = stmt2.executeQuery("SELECT ID FROM RUTA WHERE (ORIGEN ='"+origen+"' AND DESTINO ='"+destino+"' AND KMBUENOS ="+distancia+");");

			rs.next();
			retorno = rs.getInt("ID");
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return retorno;

	}

}
